module.exports = app => {
    const express = require('express')
    const AdminUser = require('../../models/AdminUser')
    const jwt = require('jsonwebtoken')
    const assert = require('http-assert')
    const authMiddleware = require('../../middleWare/auth')
    const resourceMiddleware = require('../../middleWare/resource')
    const router = express.Router({
        mergeParams: true
    })

    //新增资源
    router.post('/', async (req, res) => {
        const model = await req.Model.create(req.body)
        res.send(model)
    })

    //资源列表
    router.get('/', async (req, res) => {
        const queryOptions = {}
        if (req.Model.modelName === 'Category') {
            queryOptions.populate = 'parent'
        }
        const items = await req.Model.find().setOptions(queryOptions)
        res.send(items)
    })

    //删除资源
    router.delete('/:id', async (req, res) => {
        await req.Model.findByIdAndDelete(req.params.id, req.body)
        res.send({
            success: true
        })
    })
    router.put('/:id', async (req, res) => {
        const model = await req.Model.findByIdAndUpdate(req.params.id, req.body)
        res.send(model)
    })

    //资源详情
    router.get('/:id', async (req, res) => {
        const model = await req.Model.findById(req.params.id)
        res.send(model)
    })

    
    app.use('/admin/api/rest/:resource', authMiddleware(), resourceMiddleware(), router)


    //上传资源
    const multer = require('multer')

    const upload = multer({ dest: __dirname + '/../../uploads' })

    app.post('/admin/api/upload', authMiddleware(), upload.single('file'), async (req, res) => {
        const file = req.file
        file.url = 'http://localhost:3000/uploads/' + file.filename
        res.send(file)
    })

    //登录
    app.post('/admin/api/login', async (req, res) => {
        const { username, password } = req.body
        //根据用户名查找
        const AdminUser = require('../../models/AdminUser')
        const user = await AdminUser.findOne({ username }).select('+password')
        assert(user, 422, '用户不存在')
        // if (!user) {
        //    return res.status(422).send({
        //          message: '用户不存在'
        //      })
        //  }

        //校验密码
        const isValid = require('bcrypt').compareSync(password, user.password)
        if (!isValid) {
            return res.status(422).send({
                message: '密码错误'
            })
        }


        //返回token


        const token = jwt.sign({ id: user._id }, app.get('secret'))
        res.send({ token })
    })

    //错误处理
    app.use(async (err, req, res, next) => {
        //console.log(err)
        res.status(err.statusCode || 500).send({
            message: err.message
        })
    })

}